/*kZime*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <vector>
#include <queue>
#include <algorithm>
#define MAXN 50233
using namespace std;
inline int read() {
	int k = 0, f = 1; char c = getchar();
	for(; !isdigit(c); c = getchar())if(c == '-') f = -1;
	for(; isdigit(c); c = getchar()) k = k * 10 + c - '0';
	return k * f;
}
/*-----------------------------------------------------------------------------*/
int n, m, c, l, r, w[MAXN]; 

bool check(int mid) {
	int flag = 0;
	int s = 0;
	for(int i = 1; i <= n + 1; i++) {
		if(w[i] - s < mid) flag++;
		else s = w[i];
	}
	if(flag > m) return false;
	else return true;
}

int AC() {
#ifndef MYLAB
	freopen("2015stone.in", "r", stdin);
	freopen("2015stone.out", "w", stdout);
#else
//	freopen("in.txt", "r", stdin);
#endif

	c = read();
	n = read();
	m = read();
	
	for(int i = 1; i <= n; i++) {
		w[i] = read();
	}
	
	l = 0;
	r = w[n + 1] = c;
	
	while(l <= r) {
		int mid = (l + r ) / 2;
		if(check(mid)) l = mid + 1;
		else r = mid - 1; 
	}

	printf("%d", l - 1); 



	return 0;
}
int HA = AC();
int main(){;}

